﻿using Max.PH5_2011A.IRespository;
using Max.PH5_2011A.IService;

namespace Max.PH5_2011A.Service
{
    public class OrderService : IOrderService
    {

        IUnitOfWork _unitOfWork;

        public OrderService(IUnitOfWork unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }

        /// <summary>
        /// 创建订单
        /// </summary>
        /// <exception cref="NotImplementedException"></exception>
        public void CreateOrder()
        {
            //要往两个表里添加数据
            //订单表和订单子表  --- 订单主表、订单明细表（订单和商品的关系）


            //要保证两个表的数据都正确地添加到数据库，需要用到事务
            //事务：执行一组非select的sql语句，保证数据的正确，要么全都成功，要么全都不成功
            //都成功：则提交事务，有不成功的：则回滚
            //事务的四大特性：原子性、一致性、隔离性、持久性
            //事务的四大隔离级别：读已提交、读未提交、重复读、序列化（串行）
            //事务的操作步骤：开启事务、回滚事务、提交事务

            //开户事务（通过工作单元中获取上下文对象）
            using (var _tran = _unitOfWork.GetDbConext().Database.BeginTransaction())
            {
                try
                {
                    //Insert(OrderModel);
                    //Insert(OrderDetail);

                    _unitOfWork.SaveChanges();

                    //成功，事务提交
                    _tran.Commit();
                }
                catch (Exception)
                {
                    //失败，则事务回滚
                    _tran.Rollback();
                }
            }
        }
    }
}